import SpawnController from '@/modules/structures/spawn'
import TaskManager from './task'
import LayoutController from '@/modules/layout'
import StructureCache from '@/modules/structureCache'
import RoomStateManager from './state'
import TowerController from '@/modules/structures/tower'
import { RoomSafeState } from './state/types'
import WarManager from './task/war'
import LabController from '@/modules/structures/lab'
import ResourceManager from './resource'
import LinkController from '@/modules/structures/link'
import FactoryController from '@/modules/structures/factory'
import PowerSpawnController from '@/modules/structures/powerSpawn'
import NukerController from '@/modules/structures/nuker'

/**
 * 房间管理器
 */
export default class RoomManager {
    public static run(room: MyRoom) {
        if (!room.memory.center) {
            return
        }

        // 房间状态管理
        RoomStateManager.run(room)
        // 资源管理
        ResourceManager.run(room)
        // 建筑缓存
        StructureCache.update(
            room,
            room.memory.state.safe?.state === RoomSafeState.underAttack ? 10 : room.controller.level * 10,
        )
        // 任务管理器运行
        TaskManager.run(room)
        // 孵化控制器
        SpawnController.run(room)
        // 自动布局
        LayoutController.place(room)
        // 塔工作
        TowerController.run(room)
        // lab 工作
        LabController.run(room)
        // 工厂工作
        FactoryController.run(room)
        // 中央 link
        LinkController.run(room)
        // powerSpawn 工作
        PowerSpawnController.run(room)
        // nuker 工作
        NukerController.run(room)
        // 战争管理
        WarManager.run(room)
    }
}
